function E = encryption(I)
%实现加密
[H, W] = size(I);
%% 
%步骤一 初始化插值图像和伪随机函数
E = zeros(2 * H, 2 * W);
seed = 2022;
rng(seed);
%%
%步骤二 计算奇数行和奇数列的像素
for i = 1: H
    for j = 1: W
        E(2 * i - 1, 2 * j - 1) =I(i, j);
    end
end
%%
%步骤三 计算奇数行和偶数列的像素（最后一列的像素除外）
w1 = rand;
for i = 1: H
    for j = 1: W - 1
        E(2 * i - 1, 2 * j) = round(E(2 * i - 1, 2 * j - 1) * w1 + E(2 * i - 1, 2 * j + 1) * (1 - w1));
    end
end

%%
%步骤四 计算偶数行和奇数列的像素（最后一行的像素除外）
w2 = rand;
for i = 1: H - 1
    for j = 1: W
        E(2 * i, 2 * j - 1) = round(E(2 * i - 1, 2 * j - 1) * w2 + E(2 * i + 1, 2 * j - 1) * (1 - w2));
    end
end
%%
%步骤五 计算偶数行和偶数列的像素（位于最后一行且最后一列的像素除外）
for i = 1: H - 1
    for j = 1: W - 1
        Q1 = min([E(2 * i - 1, 2 * j - 1), E(2 * i + 1, 2 * j - 1), E(2 * i - 1, 2 * j + 1), E(2 * i + 1, 2 * j + 1)]);
        Q2 = max([E(2 * i - 1, 2 * j - 1), E(2 * i + 1, 2 * j - 1), E(2 * i - 1, 2 * j + 1), E(2 * i + 1, 2 * j + 1)]);
        w3 = rand;
        r1 = round(Q1 * w3);
        r2 = round((255 - Q2) * w3);
        w4 = rand;
        if w4 < 0.15
            E(2 * i, 2 * j) = Q1 - r1;
        elseif w4 < 0.4
            E(2 * i, 2 * j) = Q1;
        elseif w4 < 0.5
            E(2 * i, 2 * j) = mod(Q1 + r1, 256);
        elseif w4 < 0.6
            E(2 * i, 2 * j) = abs(Q2 - r2);
        elseif w4 < 0.85
            E(2 * i, 2 * j) = Q2;
        else
            E(2 * i, 2 * j) = Q2 + r2;
        end
    end
end
%%
%步骤六 计算最后一列的像素
w5 = rand;
k = mod(round(w5 * pow2(48)), 2 * W);
for i = 1: 2 * H - 1
    E(i, 2 * W) = E(i, k + 1);
end
%%
%步骤七 计算最后一行的像素
w6 = rand;
k = mod(round(w6 * pow2(48)), 2 * H);
for j = 1: 2 * W
    E(2 * H, j) = E(k + 1, j);
end
E = uint8(E);
end